/*
 * INTERFACE 
 * A BaseDAO servirá de base para todas as outras interfaces mais específicas
 * (é a "interface pai").
 * DAO = Dados de Acesso ao Objeto
 * No escopo da interface, são declarados os métodos abstratos (sem escopo),
 * que servirão como "contratos" com a classe que irá implementá-los.
 * É onde serão declarados os métodos abstratos utilizados no CRUD
 */

package br.com.jkar.dao;

import br.com.jkar.bean.Servico;
import java.util.List;

/**
 *
 * @author Kamila Berto <kah.berto@gmail.com>
 * @param <T>
 */
public interface BaseDAO<T> {
    /*Usa-se o T para generalizar os tipos de objetos manipulados pela BaseDAO,
    assim não é mais preciso fazer cast (como era necessário quando usava-se 
    Object pra tudo.)*/
    
    T salvar(T obj) throws Exception;
    
    T alterar(T obj) throws Exception;
    
    void excluir(Integer id) throws Exception;
    
    List<T> listar() throws Exception;
    
    T procurar(Integer id) throws Exception;
    
}
